package logic

import (
	"context"
	"database/sql"
	"errors"
	"fmt"

	"go-pod/pod-rpc/internal/svc"
	"go-pod/pod-rpc/model"
	"go-pod/pod-rpc/pod"

	"github.com/zeromicro/go-zero/core/logx"
)

type UpdatePodcastLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewUpdatePodcastLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdatePodcastLogic {
	return &UpdatePodcastLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// UpdatePodcast 更新播客
func (l *UpdatePodcastLogic) UpdatePodcast(in *pod.UpdatePodcastReq) (*pod.UpdatePodcastResp, error) {
	// 先查询是否存在
	podcast, err := l.svcCtx.PodcastModel.FindOne(l.ctx, uint64(in.Id))
	if err != nil {
		if errors.Is(err, model.ErrNotFound) {
			return nil, fmt.Errorf("播客不存在")
		}
		return nil, fmt.Errorf("查询播客失败: %w", err)
	}

	// 更新字段
	if len(in.Title) > 0 {
		podcast.Title = sql.NullString{
			String: in.Title,
			Valid:  true,
		}
	}
	if len(in.Content) > 0 {
		podcast.Content = sql.NullString{
			String: in.Content,
			Valid:  true,
		}
	}
	if len(in.Tags) > 0 {
		podcast.Tags = sql.NullString{
			String: in.Tags,
			Valid:  true,
		}
	}

	// 更新数据库
	err = l.svcCtx.PodcastModel.Update(l.ctx, podcast)
	if err != nil {
		return nil, fmt.Errorf("更新播客失败: %w", err)
	}

	return &pod.UpdatePodcastResp{}, nil
}
